import modeSorted from "./mode_sorted.js";
import numericSort from "./numeric_sort.js";

/**
 * [众数](https://en.wikipedia.org/wiki/Mode_%28statistics%29)是
 * 数据集中出现频率最高的元素。当存在多个相同频率的众数时，
 * 本算法将返回最后遇到的那个值。
 *
 * 这是[集中趋势度量](https://en.wikipedia.org/wiki/Central_tendency)方法，
 * 用于寻找数据集的典型中心值。
 *
 * 本算法时间复杂度为`O(n log(n))`，因为需要先对数组进行排序，
 * 再进行`O(n)`复杂度的众数搜索。
 *
 * @param {Array<number>} x 输入数组
 * @returns {number} 众数
 * @example
 * mode([0, 0, 1]); // => 0
 */
function mode(x) {
    // 数组排序确保遍历时每个数值仅处理一次
    return modeSorted(numericSort(x));
}

export default mode;
